package com.example.nettydemo.NIONetty;

/**
 * ●Reactor 模式
 * I/0复用结合线程池，就是Reactor模式基本设计思想,
 * 1) Reactor模式， 通过-个或多个输入同时传递给服务处理器的模式(基于事件驱动)
 * 2)服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程，
 *  因此Reactor模 式也叫Dispatcher模式（分发者模式）
 * 3) Reactor 模式使用10复用监听事件,收到事件后，
 *  分发给某个线程(进程),这点就是网络服务器高并发处理关键
 *
 *  根据Reactor的数量和处理资源池线程的数量不同，有3种典型的实现
 *      1)单Reactor单线程//
 *      2)单Reactor多线程//一个人拉客和接客-》多个人做事
 *      3)主从Reactor多线程//一个人拉客-》多个人接客-》更多人做事
 */
public class Reactor模式 {
    /**
     *  2)单Reactor多线程
     *  1) Reactor 对象通过select监控客户端请求事件,收到事件后，通过dispatch进行分发
     *  2)如果建立 连接请求,则右Acceptor通过 accept处理连接请求，
     *      然后创建一个Handler对象处理完成连接后的各种事件
     *  3)如果不是连接请求，则由reactor分 发调用连接对应的handler来处理
     *  4)handler只负责响应事件，不做具体的业务处理,通过read读取数据后，
     *      会分发给后面的worker线程池的某个线程处理业务
     *  5)worker线程池会分配独立线程完成真正的业务，并将结果返回给handler
     *  6) handler收到响 应后，通过send将结果返回给client
     *
     *   1)优点:可以充分的利用多核cpu的处理能力
     *   2)缺点:多线程数据共享和访间比较复杂，reactor 处理所有的事件的监听和响应，
     *     在单线程运行，在高并发场景容易出现性能瓶颈.
     *
     */

    /**
     * 主从Reactor多线程
     * 1)优点:父线程与子线程的数据交互简单职责明确，父线程只需要接收新连接，
     * 子线程完成后缕的业务处理。
     * 2)优点:父线程与子线程的数据交互简单，Reactor 主线程
     *  只需要把新连接传给子线程，子线程无需返回数据。
     * 3)缺点:编程复杂度较高
     *
     * 结合实例:这种模型在许多项目中广泛使用，包括Nginx主从Reactor 多进程模型，
     * Memcached主从多线程，Netty 主从多线程模型的支持
     */

}
